//
//  HMStatusViewModel.swift
//  Black22
//
//  Created by Apple on 16/11/23.
//  Copyright © 2016年 KY. All rights reserved.
//

import UIKit
import SDWebImage

//  对应的视图是首页的tableview
class HMStatusViewListModel: NSObject {

    //  数据源
    lazy var statusList: [HMStatusViewModel] = [HMStatusViewModel]()
    
    //  请求微博数据
    func loadData(isUp: Bool, callback: @escaping (Bool, String) -> Void) {
        let token = HMUserAccountViewModel.sharedUserAccount.accessToken!
        //  上拉加载所需要的微博id
        var maxId: Int64 = 0
        var sinceId: Int64 = 0
        if isUp {
            //  上拉加载获取最后一个模型的微博微博id去做数据请求
            maxId = statusList.last?.status?.id ?? 0
            
            if maxId > 0 {
                //  去重数据
                maxId -= 1
            }
            
        } else {
            sinceId = statusList.first?.status?.id ?? 0
        }
        
        var message = "没有加载到最新的微博数据"
        
        HMNetworkTools.sharedTools.requestStatus(accessToken: token, maxId: maxId, sinceId: sinceId, callBack: { (response, error) -> Void in
            if error != nil {
                
                print(error!)
                callback(false, message)
                return
                
            }
            
            let dic = response as! [String: Any]
            let statusDic = dic["statuses"] as! [[String: Any]]
            //  使用YYModel完成字典转模型
            let modelArray = NSArray.yy_modelArray(with: HMStatus.self, json: statusDic) as! [HMStatus]
            
            var tempArray = [HMStatusViewModel]()
            //  创建调度组
            let group = DispatchGroup()
            
            for model in modelArray {
                //  模型转出所需要的ViewModel
                let viewModel = HMStatusViewModel()
                viewModel.status = model
                tempArray.append(viewModel)
                
                //  创建任务下载图片
                if model.pic_urls?.count == 1 {
                    let imageUrl = model.pic_urls![0].thumbnail_pic!
                    //  下载图片
                    group.enter()
                    SDWebImageManager.shared().downloadImage(with: URL(string: imageUrl), options: [], progress: nil, completed: { (image, error, _, _, _) in
                        print("原创图片下载完成")
                        group.leave()
                    })
                }
                
                if model.retweeted_status?.pic_urls?.count == 1 {
                    //  下载图片
                    let imageUrl = model.retweeted_status!.pic_urls![0].thumbnail_pic!
                    //  下载图片
                    group.enter()
                    SDWebImageManager.shared().downloadImage(with: URL(string: imageUrl), options: [], progress: nil, completed: { (image, error, _, _, _) in
                        print("转发图片下载完成")
                        group.leave()
                    })
                }
            }
            
            //  设置数据源
            if isUp {
                //  上拉加载 把数据追加到原有数据的后面
                self.statusList.append(contentsOf: tempArray)
            } else {
                //  下拉刷新 把数据插入到数组的第一个元素位置
                self.statusList.insert(contentsOf: tempArray, at: 0)
            }
//            self.statusList = tempArray
            if tempArray.count > 0 {
                message = "加载了\(tempArray.count)条微博数据"
            }
            //  重新加载数据
            group.notify(queue: DispatchQueue.main, execute: { 
                print("图片下载完成")
            
                callback(true, message)
            })
            
            
            
            
        })
    }

    
    
}
